import { AppTask, AppTaskQueue } from "../app.task.class";
import { Subject } from "rxjs";
import { V3proSubjectMessage } from "./model/v3pro.model";
import { genHealthCheckTasks } from "./health-check/health.check.index";

/**
 * v3pro Heath Check Server
 * 用于检查v3pro服务是否正常
 * 1. 采集消息
 * 2. 将采集状态结果发送到订阅器
 */
export class V3proHeathCheckServer extends AppTask {
  /**
   * 构造函数，需要传入订阅器
   * @param __subject
   */
  constructor(private __subject: Subject<V3proSubjectMessage>) {
    super();
  }

  __pause(): Promise<boolean> {
    return Promise.resolve(false);
  }

  __restore(): Promise<boolean> {
    return Promise.resolve(false);
  }

  /**
   * 任务队列
   * @private
   */
  private __tasks = new AppTaskQueue(100);

  /**
   * 运行任务
   * 1. 添加任务到队列（起始没卵用，只是方便启动）
   * 2. 保持运行（只能通过 stop 函数停止）
   */
  async __run(): Promise<void> {
    this.__tasks.addTasks(this.__genHealthCheckTasks());
    await this.__await();
  }

  /**
   * 生成采集任务代理方法
   */
  private __genHealthCheckTasks() {
    return genHealthCheckTasks(this.__subject);
  }

  __stop(): Promise<boolean> {
    this.__tasks.destroy();
    return Promise.resolve(true);
  }
}
